package lambda;

import java.io.File;
import java.io.FileFilter;

/*
 * lambda表达式  JDK之后推出的新特性
 * lambda可以让程序员面向函数式编程
 * 让我们用更精简的语法创建匿名内部类
 * 语法
 * (参数列表) -<
 */
public class LambdaDemo {
    //匿名内部类写法创建一个文件过滤器
    FileFilter f1 = new FileFilter() {
        public boolean accept(File f) {
            return f.length()>500;
        }
    };
    //lambda应用
    public static void main(String[] args) {
        File dir = new File("./src/file");
        if (dir.isDirectory()){
            File[] subs = dir.listFiles (file -> file.length()>500);
            for (int i=0;i<subs.length;i++){
                System.out.println(subs[i].getName()+";"+subs[i].length()+"字节");
            }
        }
    }

    //lambda表达式写法：去掉接口和方法名部分，在参数列表和方法体大括号之间加上“ -> ”
    FileFilter f2 = (File f) -> {
        return f.length()>500;
    };

    //lambda表达式中，可以忽略方法参数类型（仅写参数名即可）
    FileFilter f3 = (f) -> {
        return f.length()>500;
    };

    //如果该方法的参数只有【一个】的时候，参数列表的"()"可以忽略不写
    FileFilter f4 = f -> {
        return f.length()>500;
    };

    //如果方法体中只有一句代码，那么方法体的"{}"可以忽略不写
    //注：如果有return关键字，忽略"{}"的同时"return"关键字也必须一同忽略
    FileFilter f5 = f -> f.length()>500;
}
